    function Try
    {
        param
        (
            [ScriptBlock]$Command = $(throw "The parameter -Command is required."),
            [ScriptBlock]$Catch   = { throw $_ },
            [ScriptBlock]$Finally = {}
        )
       
        & {
            $local:ErrorActionPreference = "SilentlyContinue"
           
            trap
            {
                trap
                {
                    & {
                        trap { throw $_ }
                        &$Finally
                    }
                   
                    throw $_
                }
               
                $_ | & { &$Catch }
            }
           
            &$Command
        }

        & {
            trap { throw $_ }
            &$Finally
        }
    }

    # Example usage 

    Try {
        echo " ::Do some work..."
        echo " ::Try divide by zero: $(0/0)"
    } -Catch {
        echo "  ::Cannot handle the error (will rethrow): $_"
        #throw $_
    } -Finally {
        echo " ::Cleanup resources..."
    }